填充和对齐
以前,我们使用 string.Format() 方法来执行复合格式设置。看起来有点奇怪,表示数据类型的关键字具有可按照 Console 类中方法的调用方式调用的方法。事实上,对于 string 数据类型,及字符串类型的任何文本字符串或变量,都具有很多类似的方法。
下面是这些内置方法类别的简要列表,你可以了解可用的类别:
- 添加空白进行格式设置的方法:(
PadLeft()、PadRight()) - 比较两个字符串或辅助比较的方法:(
Trim()、TrimStart()、TrimEnd()、GetHashcode()、Length属性) - 帮助确定字符串内部内容,甚至只检索部分字符串的方法:(
Contains()、StartsWith()、EndsWith()``Substring()) - 通过替换、插入或删除部件来更改字符串内容的方法:(
Replace()、Insert()、Remove()) - 将字符串转换为字符串或字符数组的方法:(
Split()、ToCharArray())
我们会在其他模块中使用这些方法,因为我们发现了其功能的用法。
通过在前后添加空格来设置字符串格式
PadLeft() 方法将在字符串左侧添加空格,使字符总数等于你发送的参数。在这种情况下,我们要将字符串的总长度限定为 12 个字符。
string input = "Pad this";
Console.WriteLine(input.PadLeft(12));
运行代码时,可以注意到字符串左侧有四个字符作为前缀,使其长度为 12 个字符:
Pad this
若要在字符串右侧添加空格或字符,请改用 PadRight() 方法。
Console.WriteLine(input.PadRight(12));
运行代码时,不会看到添加到字符串末尾的任何字符,但这些字符确实存在。
什么是重载方法?
在 C# 中,重载方法是具有不同或其他参数的方法的另一个版本,这些参数会略微修改方法的功能,就像在 PadLeft() 方法的重载版本中一样。我们将了解如何在其他模块中创建方法和重载方法。
你还可以调用方法的第二个重载版本,并传入要使用的任何非空格字符。在此示例中,我们将用短划线字符替换额外的空格。
Console.WriteLine(input.PadLeft(12, '-'));
Console.WriteLine(input.PadRight(12, '-'));
运行代码时,你将注意到长度为 12 个字符的字符串,其左侧有四个短划线作为前缀:
----Pad this
Pad this----
让我们将此新知识应用到另一个实际场景中。
练习 - 使用已填充的字符串
假设我们为之提供服务的支付处理公司仍支持旧式大型机系统。通常,这些系统要求在特定列中输入数据。例如," 付款 ID" 应存储在第 1 到 6 列中," 收款人姓名 " 存储在第 7 到 30 列中," 付款金额 " 存储在第 31 到 40 列中。此外,重要的是,付款金额应采用右对齐的格式。
这要求我们构建一个应用程序,用于将关系数据库管理系统中的数据转换为旧文件格式。为确保集成能够正常运行,第一步是通过为旧系统的维护人员提供输出示例来确认文件格式。稍后,我们将完成此工作,发送成百上千个要通过 ASCII 文本文件处理的付款。
将 OrderId 添加到输出
若要开始,只需在前六列中打印付款 ID。选取一些随机支付数据,这些数据应足以满足我们的目的。
string paymentId = "769";
var formattedLine = paymentId.PadRight(6);
Console.WriteLine(formattedLine);
我们将重复使用 formattedLine 变量来生成输出字符串。运行代码时,应会看到以下输出:
769
右侧有三个不可见空白。我们将在下一步中确认它们是否存在。
将收款人姓名添加到输出
接下来,我们将添加虚构的收款人姓名,并对其进行适当填充。
在 .NET 编辑器中修改步骤 1 的代码以匹配以下代码:
string paymentId = "769";
string payeeName = "Mr. Stephen Ortega";
var formattedLine = paymentId.PadRight(6);
formattedLine += payeeName.PadRight(24);
Console.WriteLine(formattedLine);
+= 运算符执行字符串串联,同时获取 formattedLine 变量以前的值并向其添加新值。它简短地等效于执行此操作:
formattedLine = formattedLine + payeeName.PadRight(24);
在运行代码时,将获得以下输出:
769 Mr. Stephen Ortega
同样,收款人姓名后会出现一些空白。此外,我们还可在步骤 1 的 " 付款 ID" 后面看到三个空白。
将付款金额添加到输出
接下来,让我们添加虚构的付款金额,并确保使用 PadLeft() 使输出右对齐。
在 .NET 编辑器中修改步骤 1 和 2 中的代码以匹配以下内容:
string paymentId = "769";
string payeeName = "Mr. Stephen Ortega";
string paymentAmount = "$5,000.00";
var formattedLine = paymentId.PadRight(6);
formattedLine += payeeName.PadRight(24);
formattedLine += paymentAmount.PadLeft(10);
Console.WriteLine(formattedLine);
在运行代码时,将获得以下输出:
769 Mr. Stephen Ortega $5,000.00
这非常接近于我们知道的旧系统的维护人员所寻找的内容。
在输出上方添加数字行,以便更轻松地确认结果
由于很难对出现每个数据元素的确切列进行计数,因此,让我们直接在输出上方添加一行,帮助我们计算列。
Console.WriteLine("1234567890123456789012345678901234567890");
在 .NET 编辑器中修改步骤 1 到 3 中的代码以匹配以下内容:
string paymentId = "769";
string payeeName = "Mr. Stephen Ortega";
string paymentAmount = "$5,000.00";
var formattedLine = paymentId.PadRight(6);
formattedLine += payeeName.PadRight(24);
formattedLine += paymentAmount.PadLeft(10);
Console.WriteLine("1234567890123456789012345678901234567890");
Console.WriteLine(formattedLine);
运行应用程序时,已得到以下输出,可将其发送给旧系统的维护人员,以确认新的集成是否正常运行:
1234567890123456789012345678901234567890
769 Mr. Stephen Ortega $5,000.00
成功!
回顾
下面是本单元中的几个要点:
- 字符串类型的
string数据类型、文本字符串和变量分别实现了许多用于对字符串进行格式设置、修改和执行其他操作的帮助程序方法。 - 使用
PadLeft()和PadRight()方法可将空格(或可选其他字符)添加到字符串的总长度。 - 可以使用
PadLeft()让字符串右对齐。 - 某些方法是重载的,这意味着它们具有多个版本的方法,各版本具有不同的参数,可影响其功能。
+=运算符将右侧的新字符串连接到左侧的现有字符串。